#ifndef __CONCRETETASK_H__
#define __CONCRETETASK_H__

#include <functional>
#include <utility>
#include "BaseTask.h"

HTHREADPOOL_NAMESPACE_BEGIN
    template<typename FUNC>
    class ConcreteTask : public AbstractTask
    {
    public:
        // std::forward<FUNC>(func) 是使用 std::forward 将 func 转发给 ConcreteTask 的构造函数。这样做可以保持 func
        // 的左值或右值属性，具体取决于传递给 Task
        // 构造函数的参数是左值还是右值。这是一种用于完美转发参数的技术，它可以在不失去传递参数原始类型属性的情况下将参数传递给其他函数或对象。
        explicit ConcreteTask(FUNC&& func)
        : m_func(std::forward<FUNC>(func))
        //        : m_func(std::move(func))
        {
        }

        void execute() override { m_func(); };

    private:
        FUNC m_func;
    };

HTHREADPOOL_NAMESPACE_END

#endif
